<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>uCXpresso.BLE: CSemaphore Class Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="../../upnp.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">uCXpresso.BLE
   &#160;<span id="projectnumber">v1.0.4</span>
   </div>
   <div id="projectbrief">RTOS C++ Framework for Bluetooth Low Energy</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="../../modules.html"><span>Modules</span></a></li>
      <li class="current"><a href="../../annotated.html"><span>Classes</span></a></li>
      <li><a href="../../examples.html"><span>Examples</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="../../search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="../../annotated.html"><span>Class&#160;List</span></a></li>
      <li><a href="../../classes.html"><span>Class&#160;Index</span></a></li>
      <li><a href="../../hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
      <li><a href="../../functions.html"><span>Class&#160;Members</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('d0/d06/class_c_semaphore.html','../../');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Groups</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="../../dc/db2/class_c_semaphore-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">CSemaphore Class Reference<div class="ingroups"><a class="el" href="../../d8/dba/group___r_t_o_s.html">RTOS</a></div></div>  </div>
</div><!--header-->
<div class="contents">

<p><code>#include &quot;<a class="el" href="../../d6/dc6/semaphore_8h_source.html">class/semaphore.h</a>&quot;</code></p>
<div class="dynheader">
Inheritance diagram for CSemaphore:</div>
<div class="dyncontent">
 <div class="center">
  <img src="../../d0/d06/class_c_semaphore.png" usemap="#CSemaphore_map" alt=""/>
  <map id="CSemaphore_map" name="CSemaphore_map">
<area href="../../dc/dac/class_c_object.html" alt="CObject" shape="rect" coords="0,0,85,24"/>
</map>
 </div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:af4e913cd2861355f8be2211ae21753ba"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d06/class_c_semaphore.html#af4e913cd2861355f8be2211ae21753ba">counting</a> (int count, int init=0)</td></tr>
<tr class="separator:af4e913cd2861355f8be2211ae21753ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0fc078dfd286cb3321c6cbaf7bcbb7b2"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d06/class_c_semaphore.html#a0fc078dfd286cb3321c6cbaf7bcbb7b2">binary</a> ()</td></tr>
<tr class="separator:a0fc078dfd286cb3321c6cbaf7bcbb7b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abad6f22e40a0d911e38ade968f4d801a"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d06/class_c_semaphore.html#abad6f22e40a0d911e38ade968f4d801a">wait</a> (int timeout=MAX_DELAY_TIME)</td></tr>
<tr class="separator:abad6f22e40a0d911e38ade968f4d801a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa1a25ff1be26f8dfdd0f008aeabec8b1"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d06/class_c_semaphore.html#aa1a25ff1be26f8dfdd0f008aeabec8b1">release</a> (bool fromISR=false)</td></tr>
<tr class="separator:aa1a25ff1be26f8dfdd0f008aeabec8b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2302ceb8f2f9e1bef3381f457589177d"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d06/class_c_semaphore.html#a2302ceb8f2f9e1bef3381f457589177d">waiting</a> ()</td></tr>
<tr class="separator:a2302ceb8f2f9e1bef3381f457589177d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26a76c241a4d62d2efdac57d2cfe4c0f"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/dac/class_c_object.html#a26a76c241a4d62d2efdac57d2cfe4c0f">isThread</a> ()</td></tr>
<tr class="separator:a26a76c241a4d62d2efdac57d2cfe4c0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>The <a class="el" href="../../d0/d06/class_c_semaphore.html">CSemaphore</a> class provides two kinds semaphore which counting and binary. </p>
<dl class="section note"><dt>Note</dt><dd><a class="el" href="../../d0/d06/class_c_semaphore.html">CSemaphore</a> cannot be used before a call to member counting or binary. </dd></dl>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a0fc078dfd286cb3321c6cbaf7bcbb7b2"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool CSemaphore::binary </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Call the member function to creates a binary semaphore. </p>
<dl class="section return"><dt>Returns</dt><dd>true if create semaphore successful; otherwise, failed. </dd></dl>
<dl class="section note"><dt>Note</dt><dd>Binary semaphores and mutexes are very similar but have some subtle differences: Mutexes include a priority inheritance mechanism, binary semaphores do not. This makes binary semaphores the better choice for implementing synchronisation (between tasks or between tasks and an interrupt), and mutexes the better choice for implementing simple mutual exclusion. </dd></dl>

</div>
</div>
<a class="anchor" id="af4e913cd2861355f8be2211ae21753ba"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool CSemaphore::counting </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>count</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>init</em> = <code>0</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Call the member function to creates a counting semaphore. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">count</td><td>is a integer value to specified the maximum count thate can be reached. </td></tr>
    <tr><td class="paramname">init</td><td>is a integer value to assigned to the semaphore when it is created. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if create semaphore successful; otherwise, failed. </dd></dl>

</div>
</div>
<a class="anchor" id="a26a76c241a4d62d2efdac57d2cfe4c0f"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool CObject::isThread </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span><span class="mlabel">inherited</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Check current object that inherits from <a class="el" href="../../d0/d26/class_c_thread.html">CThread</a> class or not. </p>
<dl class="section note"><dt>Note</dt><dd>The isTherad() will be override by <a class="el" href="../../d0/d26/class_c_thread.html">CThread</a> class. </dd></dl>

<p>Reimplemented in <a class="el" href="../../d0/d26/class_c_thread.html#ab2513fd0fcad30e2e6605609c91f1984">CThread</a>.</p>

</div>
</div>
<a class="anchor" id="aa1a25ff1be26f8dfdd0f008aeabec8b1"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual int CSemaphore::release </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>fromISR</em> = <code>false</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Call the member function to release a semaphore. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">fromISR</td><td>is a boolean to specified the release occur from interrupt routine. (internal used) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a integer value to identify the context switch wake. (internal used)</dd></dl>
<div class="fragment"><div class="line">Example:</div>
<div class="line">        <a class="code" href="../../d0/d06/class_c_semaphore.html">CSemaphore</a> semLED;</div>
<div class="line"></div>
<div class="line">        <span class="comment">// resource</span></div>
<div class="line">        <a class="code" href="../../de/d89/class_c_bus.html">CBus</a> leds(<a class="code" href="../../db/dff/group___enumerations.html#gga65a2241721e4acb573e0c3fe29ac432fadac6477842247cab1a8c02c65f431b44">LED1</a>, <a class="code" href="../../db/dff/group___enumerations.html#gga65a2241721e4acb573e0c3fe29ac432fa8379bbaa96d151e6adac488b2a147b7a">LED2</a>, <a class="code" href="../../db/dff/group___enumerations.html#gga65a2241721e4acb573e0c3fe29ac432fa5dec293e081e0fc78369c842fab8452b">LED3</a>, <a class="code" href="../../db/dff/group___enumerations.html#gga65a2241721e4acb573e0c3fe29ac432fad60e39b8d1701d30aa64f80343217342">LED4</a>, <a class="code" href="../../db/dff/group___enumerations.html#gga65a2241721e4acb573e0c3fe29ac432fadc6f24fd6915a3f2786a1b7045406924">END</a>);</div>
<div class="line">        <span class="keywordtype">int</span>  index;</div>
<div class="line"></div>
<div class="line">        <span class="comment">// task1</span></div>
<div class="line">        <span class="keyword">class </span>Task1: <span class="keyword">public</span> <a class="code" href="../../d0/d26/class_c_thread.html">CThread</a> {</div>
<div class="line">        <span class="keyword">protected</span>:</div>
<div class="line">            <span class="keyword">virtual</span> <span class="keywordtype">void</span> run() {</div>
<div class="line">                <span class="keywordflow">while</span>(1) {</div>
<div class="line">                    index = rand() % 4;     <span class="comment">// get a random value in 0~3.</span></div>
<div class="line">                    semLED.<a class="code" href="../../d0/d06/class_c_semaphore.html#aa1a25ff1be26f8dfdd0f008aeabec8b1">release</a>();       <span class="comment">// release resource.</span></div>
<div class="line">                    sleep(500);</div>
<div class="line">                }</div>
<div class="line">            }</div>
<div class="line">        };</div>
<div class="line"></div>
<div class="line">        <span class="comment">// task2</span></div>
<div class="line">        <span class="keyword">class </span>Task2: <span class="keyword">public</span> <a class="code" href="../../d0/d26/class_c_thread.html">CThread</a> {</div>
<div class="line">    <span class="keyword">protected</span>:</div>
<div class="line">            <span class="keyword">virtual</span> <span class="keywordtype">void</span> run() {</div>
<div class="line">                <span class="keywordflow">while</span>(1) {</div>
<div class="line">                    semLED.<a class="code" href="../../d0/d06/class_c_semaphore.html#abad6f22e40a0d911e38ade968f4d801a">wait</a>();          <span class="comment">// wait resource available.</span></div>
<div class="line">                    leds[index] = !leds[index];</div>
<div class="line">                }</div>
<div class="line">            }</div>
<div class="line">        }</div>
<div class="line"></div>
<div class="line">        <span class="keywordtype">void</span> main() {</div>
<div class="line">            ...</div>
<div class="line">            semLED.<a class="code" href="../../d0/d06/class_c_semaphore.html#a0fc078dfd286cb3321c6cbaf7bcbb7b2">binary</a>();    <span class="comment">// set the semaphore in binary mode</span></div>
<div class="line">            ...</div>
<div class="line">        }</div>
</div><!-- fragment --> 
</div>
</div>
<a class="anchor" id="abad6f22e40a0d911e38ade968f4d801a"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool CSemaphore::wait </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>timeout</em> = <code>MAX_DELAY_TIME</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Call the member function to wait a semaphore available. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">timeout</td><td>is a integer value to specified the millisecond to wait for the semaphore to become available. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if create semaphore successful; otherwise, failed.</dd></dl>
<div class="fragment"><div class="line">Example:</div>
<div class="line">        <a class="code" href="../../d0/d06/class_c_semaphore.html">CSemaphore</a> semLED;</div>
<div class="line"></div>
<div class="line">        <span class="comment">// resource</span></div>
<div class="line">        <a class="code" href="../../de/d89/class_c_bus.html">CBus</a> leds(<a class="code" href="../../db/dff/group___enumerations.html#gga65a2241721e4acb573e0c3fe29ac432fadac6477842247cab1a8c02c65f431b44">LED1</a>, <a class="code" href="../../db/dff/group___enumerations.html#gga65a2241721e4acb573e0c3fe29ac432fa8379bbaa96d151e6adac488b2a147b7a">LED2</a>, <a class="code" href="../../db/dff/group___enumerations.html#gga65a2241721e4acb573e0c3fe29ac432fa5dec293e081e0fc78369c842fab8452b">LED3</a>, <a class="code" href="../../db/dff/group___enumerations.html#gga65a2241721e4acb573e0c3fe29ac432fad60e39b8d1701d30aa64f80343217342">LED4</a>, <a class="code" href="../../db/dff/group___enumerations.html#gga65a2241721e4acb573e0c3fe29ac432fadc6f24fd6915a3f2786a1b7045406924">END</a>);</div>
<div class="line">        <span class="keywordtype">int</span>  index;</div>
<div class="line"></div>
<div class="line">        <span class="comment">// task1</span></div>
<div class="line">        <span class="keyword">class </span>Task1: <span class="keyword">public</span> <a class="code" href="../../d0/d26/class_c_thread.html">CThread</a> {</div>
<div class="line">        <span class="keyword">protected</span>:</div>
<div class="line">            <span class="keyword">virtual</span> <span class="keywordtype">void</span> run() {</div>
<div class="line">                <span class="keywordflow">while</span>(1) {</div>
<div class="line">                    index = rand() % 4;     <span class="comment">// get a random value in 0~3.</span></div>
<div class="line">                    semLED.<a class="code" href="../../d0/d06/class_c_semaphore.html#aa1a25ff1be26f8dfdd0f008aeabec8b1">release</a>();       <span class="comment">// release resource.</span></div>
<div class="line">                    sleep(500);</div>
<div class="line">                }</div>
<div class="line">            }</div>
<div class="line">        };</div>
<div class="line"></div>
<div class="line">        <span class="comment">// task2</span></div>
<div class="line">        <span class="keyword">class </span>Task2: <span class="keyword">public</span> <a class="code" href="../../d0/d26/class_c_thread.html">CThread</a> {</div>
<div class="line">    <span class="keyword">protected</span>:</div>
<div class="line">            <span class="keyword">virtual</span> <span class="keywordtype">void</span> run() {</div>
<div class="line">                <span class="keywordflow">while</span>(1) {</div>
<div class="line">                    semLED.<a class="code" href="../../d0/d06/class_c_semaphore.html#abad6f22e40a0d911e38ade968f4d801a">wait</a>();          <span class="comment">// wait resource available.</span></div>
<div class="line">                    leds[index] = !leds[index];</div>
<div class="line">                }</div>
<div class="line">            }</div>
<div class="line">        }</div>
<div class="line"></div>
<div class="line">        <span class="keywordtype">void</span> main() {</div>
<div class="line">            ...</div>
<div class="line">            semLED.<a class="code" href="../../d0/d06/class_c_semaphore.html#a0fc078dfd286cb3321c6cbaf7bcbb7b2">binary</a>();    <span class="comment">// set the semaphore in binary mode</span></div>
<div class="line">            ...</div>
<div class="line">        }</div>
</div><!-- fragment --> 
</div>
</div>
<a class="anchor" id="a2302ceb8f2f9e1bef3381f457589177d"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual int CSemaphore::waiting </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Number of task in waiting </p>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="../../d0/d06/class_c_semaphore.html">CSemaphore</a></li>
    <li class="footer">Generated on Fri Apr 11 2014 23:43:26 for uCXpresso.BLE by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="../../doxygen.png" alt="doxygen"/></a> 1.8.6 </li>
  </ul>
</div>
</body>
</html>
